/**
 * 将回车事件转为为Tab事件
 */
window.document.onkeydown = function() {
	if (event.srcElement.type && event.srcElement.type != 'button'
			&& event.srcElement.type != 'file'
			&& event.srcElement.type != 'textarea'
			&& event.srcElement.type != 'file' && event.keyCode == 13) {
		event.keyCode = 9;
	}
	// backspace
	if (event.keyCode == 8
			&& (event.srcElement.readOnly == true
					|| event.srcElement.type == 'button' || event.srcElement.type == 'select-one')) {
		return false;
	}
};

/**
 * 只能输入数字
 */
//function keyPressEvent(){
//	if ((event.keyCode < 48 || event.keyCode >57)) 
//
//		event.returnValue = false;
//}
//
//$(document).ajaxError(function(event,request, settings){
//	removeSystemProccessing();
//	showErrorWin(request.responseText);
//}); 

/**
 * 定义AJAX 请求发送前的事件执行函数，自动为每次请求url添加随机参数，防止页面出现缓存。
 */
$(document).ajaxSend(function(event,request, settings){

	var url = settings.url;
	if (url.indexOf("?") >= 0) {
        url = url + "&timstamp=" + now();
        
    } else {
        url = url + "?timstamp=" + now();
    }
	settings.url = url;
}); 

$(document).ajaxError(function(event,request, settings){
	removeSystemProccessing();
	showInfoWin(request.responseText);
}); 

/**
 * 向用户显示提示信息窗口。<p>
 * 
 * @param msgString: 向用户提示信息的内容.
 * @param fn: 当提示窗口关闭时回调函数
 */
function showInfoWin(msgString, fn) {
	$.messager.alert("提示", msgString, "info", fn);
	//alert(msgString);
	window.focus();	// 防止弹出框中无法遮盖光标
}

/**
* 向用户显示错误信息窗口。<p>
* 
* @param msgString: 向用户提示错误信息的内容.
* @param fn: 当提示窗口关闭时回调函数
*/
function showErrorWin(msgString, fn) {
	$.messager.alert("错误", msgString, "error", fn);
	window.focus();	// 防止当焦点在按钮上时，用户多次按回车键产生多次请求
}

/**
 * 获取当前时间，返回指定的 Date 对象自 1970 年 1 月 1 日午夜（通用时间）以来的毫秒数<b>
 * 
 * @return: 返回值类型：Number -- 一个整数。
 */   
function now() {
	return (new Date).getTime();
}

//对日期进行扩展
Date.prototype.pattern=function(fmt) {         
    var o = {         
    "M+" : this.getMonth()+1, //月份         
    "d+" : this.getDate(), //日         
    "h+" : this.getHours()%12 == 0 ? 12 : this.getHours()%12, //小时         
    "H+" : this.getHours(), //小时         
    "m+" : this.getMinutes(), //分         
    "s+" : this.getSeconds(), //秒         
    "q+" : Math.floor((this.getMonth()+3)/3), //季度         
    "S" : this.getMilliseconds() //毫秒         
    };         
    var week = {         
    "0" : "\u65e5",         
    "1" : "\u4e00",         
    "2" : "\u4e8c",         
    "3" : "\u4e09",         
    "4" : "\u56db",         
    "5" : "\u4e94",         
    "6" : "\u516d"        
    };         
    if(/(y+)/.test(fmt)){         
        fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));         
    }         
    if(/(E+)/.test(fmt)){         
        fmt=fmt.replace(RegExp.$1, ((RegExp.$1.length>1) ? (RegExp.$1.length>2 ? "\u661f\u671f" : "\u5468") : "")+week[this.getDay()+""]);         
    }         
    for(var k in o){         
        if(new RegExp("("+ k +")").test(fmt)){         
            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));         
        }         
    }         
    return fmt;         
};  

/**
* 改造window.open函数,保证所有窗口居中弹出.以统一系统中的操作风格.
* 当参数width, height为空值时，该函数默认设置弹出窗口的宽度和高度（width = 800; height = 600），
* 为url请求地址自动添加随机参数，防止页面出现缓存。<p>
* 
* @param theURL: 弹出窗口路径
* @param winName: 网页名称
* @param sizeType 窗口的大小类型。共有如下几种类型：
 	1. 未指定类型或为空时，默认窗口的宽度=800、高度=600
 	2. A0: 不使用内置类型，自定义设置窗口的大小，必须设置窗口的宽度和高度。
 	3. A1：系统自动设置窗口的宽度=600、高度=450。
 	4. A2：系统自动设置窗口的宽度=800、高度=600。
 	5. A3：系统自动设置窗口的宽度=900、高度=650。
* @param width: 弹出窗口的宽度
* @param height: 弹出窗口的高度
* @param scrol: 是否显示滚动栏。默认值为no(不显示)；传递参数1, true,yes,y,Y可显示滚动栏。
* @param resizable: 是否允许改变窗口大小。默认值为no(不允许)；传递参数1, true,yes,y,Y可允许改变窗口大小。
*/
function openWin(theURL, winName, sizeType, width, height,scrol,resizable) {

	var winWidth = 0;	
	var winHeight = 0;
	
	if (sizeType == null || sizeType == "") {
		winWidth = 800;
		winHeight = 600;
	} else if (sizeType == 'A0') {
		winWidth = width;
		winHeight = height;
	} else if (sizeType == 'A1') {
		winWidth = 600;
		winHeight = 450;
	} else if (sizeType == 'A2') {
		winWidth = 800;
		winHeight = 600;
	} else if (sizeType == 'A3') {
		winWidth = 900;
		winHeight = 650;
	}
	
	var WLeft = Math.ceil((window.screen.width - winWidth) / 2);
	var WTop = Math.ceil((window.screen.height - winHeight) / 2);
	
	var features = "top="
			+ WTop
			+ ",left="
			+ WLeft
			+ ",width="
			+ winWidth
			+ "px,height="
			+ winHeight
			+ "px,toolbar=no,location=no,status=yes,menubar=no";
	if(resizable){
		var res="no";
		if(resizable=="1"||resizable==true||resizable=="yes"||resizable=='y'||resizable=="Y"){
			res="yes";
		}
		features+=",resizable="+res;
	}else{
		features+=",resizable=no";
	}
	if(scrol){
		var res="yes";
		if(scrol=="1"||scrol==true||scrol=="yes"||scrol=='y'||scrol=="Y"){
			res="yes";
		}
		features+=",scrollbars="+res;
	}else{
		features+=",scrollbars=yes";
	}
	
	if (theURL.indexOf("?") >= 0) {
		theURL = theURL + "&timstamp=" + now();
		
    } else {
    	theURL = theURL + "?timstamp=" + now();
    }
	var win = window.open(theURL, winName, features);
	win.focus();
}

/**
 * 关闭当前打开的窗口<p>
 */
function closeWin() {
	 $ .messager.confirm('提示信息', '您确定要关闭当前窗口吗?', function(result){
		 	if(result){
				window.close();
			}	
		}); 
}
 
/**
 * 获取对创建此窗口的窗口的引用。<p>
 * 
 * @return 返回对创建此窗口的窗口的引用。 
 */
function getOpenerWin() {

	 return window.opener;
}

/**
 * 刷新当前页面<p>
 * @return
 */
function refreshWin() {
	
	window.location.reload();
}

/**
 * show help windows
 * @param url
 */
function showHelpWin(url) {
	openWin('help/index.htm?topic=' + url,'pop','A3', '', '', '', true); 
}
/**
 * 将form数据组装成json对象的jquery扩展
 */
$.fn.serializeObject = function() {
	var o = {};
	var a = this.serializeArray();
	$.each(a, function() {
		if (o[this.name]) {
			if (!o[this.name].push) {
				o[this.name] = [ o[this.name] ];
			}
			o[this.name].push(this.value || '');
		} else {
			o[this.name] = this.value || '';
		}
	});
	return o;
};

function showSystemProccessing() {
	var wrap = $(document.body);

	$('<div class="system-processing-mask"></div>').css({
		display:'block',
		width: wrap.width() - 22,
		height: wrap.height() - 10
	}).appendTo(wrap);
	
	

	$('<div class="system-processing-msg"></div>')
	.html('正在处理，请稍待。。。')
	.appendTo(wrap)
	.css({
		display:'block',
		left:(wrap.width()-$('.system-processing-msg').outerWidth())/2,
		top:(wrap.height()-$('.system-processing-msg').outerHeight())/2
	});
	
	// 解决在ie6下遮罩层被下拉框select空间覆盖(暂时注释掉以下语句)
	//$('.system-processing-mask').bgiframe();  
	//$('.system-processing-msg').bgiframe();  
}

function removeSystemProccessing() {
	$('.system-processing-mask').remove();
	$('.system-processing-msg').remove();
	
}

/**
 * 弹出模态窗口。
 * @param action 弹出窗口的url
 * @param sizeType 窗口的大小类型。共有如下几种类型：
 	1. 未指定类型或为空时，默认窗口宽度=450、高度=450
 	2. A0: 不使用内置类型，自定义设置窗口的大小，必须设置窗口的宽度和高度。
 	3. A1：系统自动设置窗口的宽度=450、高度=450。
 	4. A2：系统自动设置窗口的宽度=800、高度=600。
 * @param width 窗口的宽度
 * @param height 窗口的高度
 * @param 
 */
function showModalWin(action, sizeType, width, height) {
	
	var dialogWidth = 0;
	var dialogHeight = 0;
	
	if (sizeType == null || sizeType == "") {
		dialogWidth = 450;
		dialogHeight = 450;
	} else if (sizeType == 'A0') {
		dialogWidth = width;
		dialogHeight = height;
	} else if (sizeType == 'A1') {
		dialogWidth = 450;
		dialogHeight = 450;
	} else if (sizeType == 'A2') {
		dialogWidth = 800;
		dialogHeight = 600;
	}
	
	if (isEmpty(action)) {
		showInfoWin('请输入弹出模态窗口的action！');
	}
	
	if (action.indexOf("?") >= 0) {
		action = action + "&timstamp=" + now();
		
    } else {
    	action = action + "?timstamp=" + now();
    }
	 return window.showModalDialog(action, 'select','dialogWidth=' + dialogWidth + 'px;dialogHeight=' + dialogHeight + 'px;help=no;resizable=no;status=no');
}

/**
 * 修改datagrid的默认配置。
 */
$.fn.pagination.defaults.showPageList = false;
$.fn.datagrid.defaults = $.extend({},$.fn.datagrid.defaults,{
	fit: true,         
    fitColumns: true,
	rownumbers: true,
	pagination:true,
	pageSize: 15,
	pageList: [10,15,20,30,40,50]
});
